# config.py
import torch
FPS          = 8     # 每秒采样帧数
WRITE_IN_FPS = 3     # 每多少帧获取一次动作更新到全局动作字典
CHECK_TIME   = 0.02  # 各动作子线程，每多少秒，判断一次任务结束没有？没有结束的话，去current_action中找最新指令并执行
REWARD_RANGE = 1     # 奖励回溯步数
MAX_EPISODES = 200     # 采集轨迹总数
MAX_TRAJECTORY = 20  # trajectories.h5文件最多保存的轨迹数，不能太小
EPOCH = 32 # 采样一次后，随机抽EPOCH次batch来训练
EPOCHS_PER_BATCH = 1 # 每个batch训练次数，一般一个batch只训练一次
BATCH_SIZE = 32 # 训练批次大小
GAMMA        = 0.9   # 回报折扣因子
LR           = 1e-4  # 学习率
TAU =  0.05 # 目标网络软更新幅度

JUMP_COOLDOWN = 1.3  # 秒，两次跳跃之间的冷却时间，ban二段跳
DURATION     = 240   # 单局采样时间上限240秒
TARGET_UPDATE = 5 # 目标网络硬更新频率
REWARD_LOG_PATH      = "rewards.txt"                            # 每轮总奖励的日志文件
MODEL_PATH           = "policy_hollow_knight.pth"               # 策略模型保存路径
TRAJECTORY_SAVE_PATH = "trajectories.h5"                        # 采样文件保存位置
ATOMIC_ACTIONS       = ['a', 'd', 'space', 'j', 'w', 's']  # 基础按键
DEVICE               = torch.device("cuda" if torch.cuda.is_available() else "cpu")
KNIGHT_HP_THRESHOLD  = 40                                       # 小骑士血量匹配的经验阈值 40 29
ACTION_DIMS = {             # 动作空间
    'ad'    : [0, 1, 2],    # 移动
    'space' : [0, 1],       # 跳跃
    'attack': [0, 1, 2], # 攻击
}
CAPTURE_WINDOW = {    # 截图捕捉区域
    "left"  :   0,
    "top"   :   0,
    "width" :   2560, # 2560 1920
    "height":   1440, # 1440 1080
}
BATTLE_WINDOW = {   # 战斗分析区域
    "left"  : 0,
    "top"   : 280,  # 280
    "width" : 2560, # 2560 1920
    "height": 1000, # 1000
}
KNIGHT_HP_WINDOW = {# 小骑士血量区域
    "left"  : 353,  # 353 265
    "top"   : 133,  # 133 100
    "width" : 760,  # 760 570
    "height": 1,
}
BOSS_HP_WINDOW = {  # BOSS血量区域
    "left"  : 642,  # 642 481
    "top"   : 1386, # 1386 1040
    "width" : 1275, # 1275 958
    "height": 1,
}
DASH_COOLDOWN        = 1.5                                      # 黑冲冷却时间为1.5秒